/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package EntidadesController;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author fernando
 */
public class Curso {



    /*CREATE TABLE curso (
    codigocurso varchar,
    nivel_nivel varchar(25),
    descricao varchar(30),
    CONSTRAINT pk_codigocurso PRIMARY KEY (codigocurso)
    );*/
    private String codigocurso = "";
    private String nivel_nivel = "";
    private String descricao = "";
    private String departamento_codigodep = "";
    private SQLException erro = new SQLException();
    static Connection conexao = null;
    static Statement estado = null;
    static ResultSet rs;
    private boolean render=false;
    private String msgerro;

    public Curso() {
        conexao = new Conexao().Acesso();
    }

    public String inserir() throws SQLException {
        String result_inserir = "failure";
        try {
            estado = conexao.createStatement();
//            CREATE TABLE curso (
//            codigocurso varchar,
//            nivel_nivel varchar(25),
//            descricao varchar(30),
//            CONSTRAINT pk_codigocurso PRIMARY KEY (codigocurso));

//            CREATE TABLE curso_has_departamento (
//	      curso_codigocurso VARCHAR(45),
//	      departamento_codigodep VARCHAR(45),
//	      CONSTRAINT pk_departamento_has_curso PRIMARY KEY(curso_codigocurso, departamento_codigodep));
            estado.execute("BEGIN WORK");

            estado.execute("INSERT INTO curso_has_departamento(curso_codigocurso, departamento_codigodep) VALUES ('"
                    + codigocurso + "','" + departamento_codigodep + "')");

            estado.execute("INSERT INTO curso(codigocurso, nivel_nivel, descricao) VALUES ('"
                    + codigocurso + "','" + nivel_nivel + "','" + descricao + "')");

            estado.execute("COMMIT");

            estado.close();
            result_inserir = "success";
            render = false;
        } catch (SQLException e) {
            this.erro = e;
            msgerro = erro.getLocalizedMessage();

            if (msgerro.contains("pk_matriculadisc")&&msgerro.contains("unicidade"))
            {msgerro = "Esse número de matrícula ja está cadastrado!";}

            estado.execute("ROLLBACK");
            estado.close();
            result_inserir = "failure";
            render = true;
        }
        return result_inserir;
    }

    public String buscar() throws SQLException {
        String result_busca = "failure";
        try {
            estado = conexao.createStatement();

            rs = estado.executeQuery("SELECT * FROM curso_has_departamento WHERE codigocurso = '" + this.codigocurso + "'");
            departamento_codigodep = rs.getString(2);

            rs = estado.executeQuery("SELECT * FROM curso WHERE codigocurso = '" + this.codigocurso + "'");
            if (rs.next()) {
                codigocurso = rs.getString(1);
                nivel_nivel = rs.getString(2);
                descricao = rs.getString(3);
            }
            rs.close();
            estado.close();
        } catch (SQLException e) {
            this.erro = e;
            result_busca = "failure";
        }
        return result_busca;
    }

    public String editar() {
        String result_editar = "failure";
        try {
            estado = conexao.createStatement();
            /*CREATE TABLE curso (
            codigocurso varchar,
            nivel_nivel varchar(25),
            descricao varchar(30),
            CONSTRAINT pk_codigocurso PRIMARY KEY (codigocurso)
            );*/
            estado.execute("update curso set nivel_nivel = '" + nivel_nivel + "' where codigocurso ='" + codigocurso + "'");
            estado.execute("update curso set descricao = '" + descricao + "' where codigocurso ='" + codigocurso + "'");
            estado.close();
            result_editar = "success";
        } catch (SQLException e) {
            this.erro = e;
            result_editar = "failure";
        }
        return result_editar;
    }

    public String getErro() {
        return erro.getMessage();
    }
    public String getMsgerro() {
        return msgerro;
    }

    public void setMsgerro(String msgerro) {
        this.msgerro = msgerro;
    }

    public String getCodigocurso() {
        return codigocurso;
    }

    public void setCodigocurso(String codigocurso) {
        this.codigocurso = codigocurso;
    }


    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getNivel_nivel() {
        return nivel_nivel;
    }

    public void setNivel_nivel(String nivel_nivel) {
        this.nivel_nivel = nivel_nivel;
    }
    
     public boolean isRender() {
        return render;
    }

    public void setRender(boolean render) {
        this.render = render;
    }

    /*
     * Este metodo retorna uma lista de strings, necessaria para exibir
     * a combobox na interface com o usuario e nao tda a tabela.
     */
    public List<String> getListaCurso() {

        List<String> itens = new ArrayList<String>();

        try {
            estado = conexao.createStatement();

            rs = estado.executeQuery("SELECT * FROM curso");

            while (rs.next() == true) {
                itens.add(rs.getString(1));

            }
            return itens;

        } catch (SQLException ex) {
            this.erro = ex;
            System.out.println("A tabela esta vazia.");
            Logger.getLogger(Curso.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
    /*public static void main(String[] args) throws SQLException {

    Curso c = new Curso();
    c.setCodigocurso("0701");
    System.out.println(c.buscar());
    c.setDescricao("aaaaaaaaaaa");
    c.setNivel_nivel("graduacao");
    System.out.println(c.inserir());
    c.setCodigocurso("079");
    System.out.println(c.buscar());
    c.setDescricao("abbbbbbaaaaaa");
    c.setNivel_nivel("mestrado");
    System.out.println(c.inserir());
    c.setCodigocurso("078");
    System.out.println(c.buscar());
    c.setDescricao("aaaaaaaaaaa");
    c.setNivel_nivel("graduacao");
    System.out.println(c.inserir());
    }*/
}
